﻿using Application_Core.Bauteil_Component.Data_Access_Layer;
using System;
using System.Collections.Generic;

namespace Application_Core.Bauteil_Component.Access_Layer
{
    public interface BauteilService
    {
        /// <summary>
        /// Fertigt ein neues Bauteil an und gibt die Fertigungszeit zurück.
        /// </summary>
        /// <param name="bauteilDTO">Bauteil</param>
        /// <returns>TimeSpan Fertigungszeit</returns>
        TimeSpan FertigeBauteil(BauteilDTO bauteilDTO);

        /// <summary>
        /// Erstellt ein neues Bauteil.
        /// </summary>
        /// <param name="bauteilDTO">Bauteil</param>
        void CreateBauteil(BauteilDTO bauteilDTO);

        /// <summary>
        /// Erstelle eine neue Stückliste. 
        /// </summary>
        /// <param name="stückliste"></param>
        /// <param name="positionen">Stücklistenpositionen</param>
        void CreateStückliste(StücklisteDTO stückliste, List<StücklistenPositionDTO> positionen);

        /// <summary>
        /// Sucht ein konkretes Bauteil anhand seiner Nummer.
        /// </summary>
        /// <param name="nummer">Bauteil-Nummer</param>
        /// <returns>BauteilDTO | null</returns>
        BauteilDTO FindBauteil(int nummer);

        /// <summary>
        /// Sucht ein konkretes Bauteil anhand seines Namens.
        /// </summary>
        /// <param name="name">Name</param>
        /// <returns>List<BauteilDTO></returns>
        List<BauteilDTO> FindBauteile(string name);

        /// <summary>
        /// Löscht ein vorhandenes Bauteil.
        /// </summary>
        /// <param name="nummer">Bauteil-Nummer</param>
        void DeleteBauteil(int nummer);
    }
}
